//实现一个类，类中包含一个数组成员，使得数组中可以存放任何类型的数据，
//也可以根据成员方法返回数组中某个下标的值
class myArray<T> { //<T>：泛型类
    public Object[] array = new Object[10];
    public void setArray(int pos, T val) {
        array[pos] = val;
    }
    public T getArray(int pos) {
        return (T) array[pos];
    }
}

/**
 * 写一个泛型类，实现一个方法，求指定类型数组的最大值
 */

class Func<T extends Comparable<T>> { //泛型类
    public T findMax(T[] array) {
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i].compareTo(max) > 0) {
                max = array[i];
            }
        }
        return max;
    }
}

/**
 * 写一个类，实现一个泛型方法，求指定类型数组的最大值 2.0
 */
class Func1 {
    //泛型方法
    public static <T extends Comparable<T>> T findMax(T[] array) {
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i].compareTo(max) > 0) {
                max = array[i];
            }
        }
        return max;
    }
}


public class Test2 {
    public static void main(String[] args) {
        //static修饰
        Integer[] array = {16,36,55,79,38};
        //<Integer> 可省略
        Integer ret = Func1./* <Integer> */findMax(array);
        System.out.println(ret);

    }
    public static void main3(String[] args) {
        Func1 func1 = new Func1();
        Integer[] array = {16,36,55,79,38};
        //<Integer> 可省略
        Integer ret = func1./* <Integer> */findMax(array);
        System.out.println(ret);

    }
    public static void main2(String[] args) {
        Func<String> func = new Func<>();

        Func<Integer> func1 = new Func<>();
        Integer[] array = {16,36,55,79,38};
        Integer ret = func1.findMax(array);
        System.out.println(ret);

    }
    public static void main1(String[] args) {
        //"<>" 中只能为引用类型，不能为基本数据类型
        myArray<String> stringmyArray = new myArray<>();
        stringmyArray.setArray(0, "666");
//        stringmyArray.setArray(1, 888); //error
        String str = stringmyArray.getArray(0);
        System.out.println(str);

        myArray<Integer> integermyArray = new myArray<>();
        integermyArray.setArray(0, 888);
        //myArray<Integer>：已经指定了存放的类型
//        integermyArray.setArray(1, "666"); //error
        Integer integer = integermyArray.getArray(0);
        System.out.println(integer);

    }
}
